package com.bird.设计模式.创建型.原型模式.原型模式破坏单例;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @data 2022/3/14 11:58
 * @author: bird
 * @description: 验证 原型模式破坏单例模式
 */
public class Test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        HungrySingleton hungrySingleton=  HungrySingleton.getInstance();
        Method method = hungrySingleton.getClass().getDeclaredMethod("clone");
        method.setAccessible(true);

        // 通过反射获取对象的实例
        HungrySingleton hungrySingleton1 = (HungrySingleton)method.invoke(hungrySingleton);
        System.out.println(hungrySingleton);
        System.out.println(hungrySingleton1);
        //结论: 原型模式是可以破环单例
    }
}
/*
* 验证目标：原型模式可以破环单例
* 执行流程: 如果一个类定义为单例类的话 然后这个类又实现类cloneable接口的话 然后重写类clone方法
*          那么可以通过反射破坏单例对象。
* 解决方案：要么这个单例类不实现cloneable接口 要么不重写clone方法 要么clone方法里面调用获取单例对象的方法。
* 结论：可以通过原型模式破坏单例对象 但是也可以通过其他的方法，来完善。
*
*
*
*
* */
